When computers are initially turned on or reset, a “booting” process typically occurs. When a computer “boots” a built-in diagnostic program known as a power-on self-test (POST) is performed wherein various tests are run to confirm core components of the computer system are present and functioning properly, and wherein the registers within certain hardware devices are initialized. Part of performing the POST involves loading the basic input and output system (BIOS) code into memory. A computer system requires BIOS to control the basic hardware operations, such as interactions with disk drives, hard drives, the keyboard, and other peripheral devices. After performing the POST, the computer typically loads an operating system (OS).
More specifically, the BIOS is a collection of instructions known as firmware routines typically hardwired into a read-only-memory (ROM) device and utilized by a processor of a computer to identify, initialize, allocate and manage other system hardware. The BIOS is the lowest-level software in the computer system acting as an interface between the hardware (especially the processor) and higher level programs such as the OS. By providing a set of low-level routines, the BIOS enables the OS to interface with different hardware devices while in operation, thus facilitating the operation of various software applications. The BIOS is also responsible for allowing control of a computer's hardware settings, for booting up the computer when the power is turned on or when the reset button is activated, and various other system functions.
Because BIOS code is so intimately connected to the hardware, developing such BIOS code can be very difficult. Many tools are available to help design and debug BIOS. For example, AMIBIOS Debugger, which is part of the American Megatrends, Inc. suite of programs, allows developers to debug BIOS relatively easily. Many other similar programs for debugging code are known in the art.
Typically, the developer of such BIOS code or a debugger at the BIOS level uses an in-circuit emulator (ICE) as a tool of choice to aid code development and debugging. ICE systems emulate the system processor and allow typical debugging tasks to be performed such as (1) viewing and modifying memory locations, I/O locations, and processor registers, (2) setting and clearing breakpoints, and (3) starting and stopping processor execution. However, ICE hardware and software systems are very expensive, costing on the order of $20,000 or more for a system or platform. Development sites often ration the use of limited ICE debugging tools, forcing developers to use less efficient tools, thereby impacting productivity.
In general, debugging refers to the process of identifying and eliminating errors within the BIOS code. For instance, most debuggers such as AMIBIOS Debugger mentioned herein, provide tools for stepping through the executing code of a program, monitoring the status of input/output ports, and for monitoring and modifying the contents of memory locations and central processing unit (“CPU”) registers.
Traditionally, a debugger tool runs on the computer system executing the software that is being debugged. For example, the debugging of one computer (the “target computer”) through another computer (the “host computer”) is performed via a locally-connected cable (i.e. a serial/USB/parallel cable). Each means of communication has advantages and disadvantages such as cost, speed of data transmission and system resource requirements such as memory to enable communication between the host and target computer. Communication ports on a typical target computer consist of serial/USB/parallel communication ports.
Serial ports essentially, provide a standard connector and protocol allowing the connection of peripheral devices, such as modems, to the computer. The serial port takes a byte of data and transmits the 8 bits in that byte one at a time. The advantage is that a serial port needs only one wire to transmit the 8 bits. In order for the serial port to function faster, a buffer holds data that is going out to the serial port. Most standard serial ports have a maximum transfer rate of 115 Kbps (kilobits per second). In summary, most computers have at most, two serial ports. In addition, serial port controller is not memory intensive to transfer data at such transfer rates.
Parallel ports, essentially, provide a standard connector and protocol to let you attach devices, such as printer, to your computer. The parallel port sends 8 bits of data (1 byte) at the same time. Most standard parallel ports have data transfer rate of ten times faster than serial port transfer rates with an effective bandwidth of approximately 1 Mbs (Megabits per second). Furthermore, parallel ports lack an accepted standard for bi-directional communication. In summary, most computers come with only one parallel port. In addition, the parallel port controller like the serial port controller is not memory intensive to transfer data at such transfer rates.
Devices other than serial and parallel ports that needed faster connections come with their own cards, which must be inserted in an open card slot inside the computer's case.
Recently, the universal serial bus (USB) has been introduced and provides the computer with a single, standardized, easy means to connect multiple peripheral devices to a computer. With USB 2.0, the port has a maximum data transfer rate of 480 megabits per second. However, with faster data transfer rates, the USB controller requires extensive use of memory.
Such communication options occupy either the serial, parallel, or USB port of the target computer.
Therefore, for the foregoing reasons, it is readily apparent that there is a need for a target computer communication port having low cost, higher data communication rates than serial port and memory use requirements similar to that of a serial port while still enabling communication between a target computer and a host computer for debugging POST and BIOS code without occupying a serial, parallel, or USB port of the target computer.